#ifndef __BRIDGE_H__
#define __BRIDGE_H__
#include <iostream>
#include <string>

class Color{
public:
    virtual void show()=0;
};

class RedColor : public Color{
public:
    virtual void show(){
        std::cout << "red color" << std::endl;
    }
};

class BlackColor : public Color{
public:
    virtual void show(){
        std::cout << "black color" << std::endl;
    }
};

class WhiteColor : public Color{
public:
    virtual void show(){
        std::cout << "white color" << std::endl;
    }
};

class Car{
protected:
    Color* m_color;
public:
    virtual void setColor(Color* color) = 0;
    virtual void showColor() = 0;
};

class HondaCar : public Car{
public:
    HondaCar(){}
    void setColor(Color* color){
        m_color = color;
    }
    virtual void showColor(){
        m_color->show();
    }

};

class BenzCar : public Car{
public:
    BenzCar(){}
    void setColor(Color* color){
        m_color = color;
    }
    virtual void showColor(){
        m_color->show();
    }

};


#endif